VSCode Golang Debug无法命中断点问题修复

  1. 发现在VSCode中连接公司DevBox调试Golang程序时,无法命中断点

  2. 在launch.json中添加参数

    https://kevinmatt-1303917904.cos.ap-chengdu.myqcloud.com/image-20230227134621273.png

  3. 这样Debug程序会输出日志并停在程序入口,观察日志发现

    1. 有setBreakPoints的输入,也就是说编辑器(VSCode)是正确识别到了断点并传递给dlv-dap

    2. dlv报错:找不到文件

      https://kevinmatt-1303917904.cos.ap-chengdu.myqcloud.com/image-20230227134822126.png

    3. 在dlv控制台执行 dlv sources,获取dlv装载的文件,发现有目标文件,但目录并非/home而是/data00/home

      https://kevinmatt-1303917904.cos.ap-chengdu.myqcloud.com/image-20230227134916866.png

    4. 观察VSCode的控制台打印的cwd,发现vscode识别的路径为/home

    5. stat /home,发现其为软链接,目标目录为/data00/home

    6. 定位原因,dlv将软链接文件装载为指向的物理文件,vscode传入的是软链接路径,二者路径不一致,dlv装载的内容不包含软链接路径

    7. 解决方法

      1. 在launch.json中添加"substitutePath": [{"from": "/home", "to": "/data00/home"}]
      2. 在vscode中打开的路径使用物理路径/data00/home而非软链接路径,并将$HOME设置为/data00/home(export HOME=/data00$HOME)